###yield fixtures 执行顺序

import pytest


@pytest.fixture
def fixture_one():
    print("\n执行fixture_one") #1
    return 1  #2


@pytest.fixture
def fixture_two(fixture_one):
    print("\n执行fixture_two")   #3
    yield 2   #4   return 2 并暂停
    print("\n执行fixture_two的teardown代码") #11


@pytest.fixture
def fixture_adding(fixture_one, fixture_two):
    print("\n执行fixture_adding")  #5
    result = fixture_one + fixture_two # 6
    yield result  #7  return 3 并暂停
    print("\n执行fixture_adding的teardown代码") #10



'''
test_demo 测试函数，先去调用fixture函数 fixture_two，然后调用 fixture_adding。
在fixture函数 fixture_two中，又会去调用另一个fixture函数 fixture_one。
在fixture函数 fixture_adding中，调用了 fixture_one、fixture_two。

所以，fixture函数的先后顺序是：fixture_one、fixture_two、fixture_adding。
那么，可以得知测试结束后的teardown代码执行顺序：fixture_adding、fixture_two。
'''
def test_demo(fixture_two, fixture_adding):
    print("\n执行测试函数test_demo") #8
    assert fixture_adding == 3   #9